function mnrecursos() {
	$('#content').load("html/manterrecursos.html #pnlMntrRecursos", function() {
		montarGridRecursos();
		
		montarArvoreGrupos();
		
		$('#btnSalvarPermissoes').click(function(e) {
			e.preventDefault();
			salvarPermissoes();
		});

		$('#btnSalvarRec_er').click(function(e) {
			e.preventDefault();
			salvarRec_er();
		});

		$('#tabs').tabs({
			activate: function(event, ui) {
				var aba = $(ui.newTab).find('a').html(); 
				if (aba == "Rastreabilidade de Recursos") {
					montarArvoreRecursos();
					$('#btnSalvarPermissoes').attr("disabled", "disabled");
				} else if (aba == 'Interdependência entre os Recursos') {
					montarArvoreEnte();
					montarArvoreIdo();
				}
			}
		});
		
		$('#pnlRec_er input[type="radio"]').click(function() {
			habilitarEdicao($(this).val() == 1);
		});

		$('#tabRecursos').tabs();
		$('#tabGrupos').tabs();
		$('#pnlModos').tabs();
		$('#pnlSalvar').tabs();
		$('#pnlEnte').tabs();
		$('#pnlIdo').tabs();
	});
}

function montarGridRecursos() {
	var pCampos = {
	    	id: {key: true,
		   		 create: false,
		   		 edit: false,
		   		 list: false},
	 	    subs: {
		    	title: 'Subs',
		    	width: '5%',
		    	sorting: false,
		    	edit: false,
		    	create: false,
		    	display: function(dados) {
		    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Exibir sub-recursos"});
		    		$(img).click(function() {
		    			abrirSub(img.closest('tr'), dados.record);
		    		});
		    		return img;
			    }},
		   	nome: {title: 'Nome',
		           width: '15%'},
		    titulo: {title: 'Título',
		    		 width: '15%'},
		    descricao: {title: 'Descrição',
		    		 	width: '15%'}
			};
		var pChave = 'nome ASC';
		var pClasse = 'recurso';
		var pFiltro = new Array({campo: 'nome', titulo: 'Nome', selecionado: true}, 
								{campo: 'titulo', titulo: 'Titulo', selecionado: false},
								{campo: 'descricao', titulo: 'Descrição', selecionado: false}
		);
		manter(pCampos, pChave, pClasse, pFiltro, $('#pnlRecursos'));
}

function abrirSub(tr, recurso) {
	var pCampos = {
	    	id: {key: true,
		   		 create: false,
		   		 edit: false,
		   		 list: false},
	 	    subs: {
		    	title: 'Subs',
		    	width: '5%',
		    	sorting: false,
		    	edit: false,
		    	create: false,
		    	display: function(dados) {
		    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Exibir sub-recursos"});
		    		$(img).click(function() {
		    			abrirSub(img.closest('tr'), dados.record);
		    		});
		    		return img;
			    }},
		   	nome: {title: 'Nome',
		           width: '15%'},
		    titulo: {title: 'Título',
		    		 width: '15%'},
		    descricao: {title: 'Descrição',
		    		 	width: '15%'}
			};

	$('#grdDataset').jtable('openChildTable', 
			tr, 
			{
				title : 'Sub-recursos de ' + recurso.titulo,
			    messages: getJTableMessages(),
				selecting: true,
				actions: {
	                listAction: 'post.php?action=recurso.consultar&recurso=' + recurso.id,
	                createAction: 'post.php?action=recurso.inserir&recurso=' + recurso.id,
	                updateAction: 'post.php?action=recurso.alterar&recurso=' + recurso.id,
	                deleteAction: 'post.php?action=recurso.excluir'
				},
		        fields: pCampos
		    },
			function (data) {
				data.childTable.jtable('load');
			});
}

function montarArvoreGrupos() {
	params = [{
		nome: "action",
		valor: "grupousuarios.consultarArvore"
	}];

	treeCfg = {
		check : {
			enable : true,
			chkboxType: { "Y": "p", "N": "s" }
		},
		data : {
			key : {
				name : "grupo",
				children : "subs"
			}
		}
	};

	montarArvore($("#arvGrupos"), params, treeCfg);
}

function montarArvoreRecursos() {
	params = [{
		nome: "action",
		valor: "recurso.consultarArvore"
	}];

	treeCfg = {
		view : {
			selectedMulti : false
		},
		data : {
			key : {
				name : "titulo",
				children : "subs"
			}
		},
		callback: {
			onClick: function (evento, tree, node) {
				var tree = $.fn.zTree.getZTreeObj("arvGrupos");
				tree.checkAllNodes(false);
				preencherGrupos(node.id);
				$('#btnSalvarPermissoes').removeAttr("disabled");
			}
		}
	};
	
	exec(params, function(dados) {
		$("#arvRecursos").addClass("ztree");
		var tree = $.fn.zTree.init($("#arvRecursos"), treeCfg, dados.Records);
		tree.expandAll(true);
		checarPermissoes(tree);
	});
}

function checarPermissoes(tree) {
	var nodes = tree.transformToArray(tree.getNodes());

	for (var x in nodes) {
		if (nodes[x].selfPerm == 0) {
			tree.setChkDisabled(nodes[x], true, false, true);
		}
	}
}

function preencherGrupos(recurso) {
	params = [{
		nome: "action",
		valor: "acesso.consultarGruposComAcesso"
	},
	{
		nome: "recurso",
		valor: recurso
	}];

	exec(params, function(dados) {
		carregarPermissoes(dados.Records);
	});
}

function carregarPermissoes(dados) {
	var tree = $.fn.zTree.getZTreeObj("arvGrupos");
	var node = null;
	
	for(var x in dados) {
		node = tree.getNodeByParam("id", dados[x].grupoid);
		tree.checkNode(node, true, false);
	}
	tree.expandAll(true);
}

function montarArvoreEnte() {
	params = [{
		nome: "action",
		valor: "recurso.consultarArvore"
	}];

	treeCfg = {
		data : {
			key : {
				name : "titulo",
				children : "subs"
			}
		},
		callback: {
			onClick: rec_er_click
		}
	};

	montarArvore($("#arvEnte"), params, treeCfg);
}

function montarArvoreIdo() {
	params = [{
		nome: "action",
		valor: "recurso.consultarArvore"
	}];

	treeCfg = {
		data : {
			key : {
				name : "titulo",
				children : "subs"
			}
		},
		callback: {
			onClick: rec_er_click
		}
	};

	montarArvore($("#arvIdo"), params, treeCfg);
}

function rec_er_click(evento, tree, node) {
	var arvEnte =  $.fn.zTree.getZTreeObj("arvEnte");
	var arvIdo =  $.fn.zTree.getZTreeObj("arvIdo");
	var sel = null;
	var params = [{
					nome: "action",
					valor: "rec_er.consultar"
				},
				{
					nome: tree.substr(3).toLowerCase(),
					valor: node.id
				}];
	
	exec(params, function(dados) {
		switch (tree) {
		case "arvEnte":
			arvEnte.setting.view.selectedMulti = false;
			arvIdo.setting.view.selectedMulti = true;
			arvIdo.cancelSelectedNode();
			
			for(sel = arvIdo.getNodeByParam("id", node.recurso, null); 
				sel != null; 
				sel = sel.getParentNode()) {
					arvIdo.selectNode(sel, true);
				}
			
			for(var i in dados.Records) {
				sel = arvIdo.getNodeByParam("id", dados.Records[i].ido, null);
				arvIdo.selectNode(sel, true);
			}

			arvIdo.expandNode(arvIdo.getSelectedNodes(), true);
			break;
		case "arvIdo":
			sel = arvEnte.getNodeByParam("id", node.id, null);
			arvEnte.setting.view.selectedMulti = true;
			arvIdo.setting.view.selectedMulti = false;
			arvEnte.cancelSelectedNode();
			arvEnte.selectNode(sel.subs, true);

			for(var i in dados.Records) {
				sel = arvEnte.getNodeByParam("id", dados.Records[i].ente, null);
				arvEnte.selectNode(sel, true);
			}

			arvEnte.expandNode(arvIdo.getSelectedNodes(), true);
			break;
		}
	});
}

function habilitarEdicao(habilitar) {
	var arvEnte =  $.fn.zTree.getZTreeObj("arvEnte");
	var arvIdo =  $.fn.zTree.getZTreeObj("arvIdo");

	if (arvEnte.setting.view.selectedMulti) {
		arvEnte.setting.callback.onClick = (habilitar) ? null : rec_er_click;
	} else {
		arvIdo.setting.callback.onClick = (habilitar) ? null : rec_er_click;
	}
	
	if (habilitar) {
		$('#btnSalvarRec_er').removeAttr("disabled");
	} else {
		$('#btnSalvarRec_er').attr("disabled", "disabled");
	}
}

function salvarRec_er() {
	var arvEnte =  $.fn.zTree.getZTreeObj("arvEnte");
	var arvIdo =  $.fn.zTree.getZTreeObj("arvIdo");
	var aux = null;
	var entes = new Array();
	var idos = new Array();
	
	aux = arvEnte.getSelectedNodes();
	for (var i in aux) {
		entes.push({ente: aux[i].id});
	}
	
	aux = arvIdo.getSelectedNodes();
	for (var i in aux) {
		idos.push({ido: aux[i].id});
	}
	
	params = [{
				nome: "action",
				valor: "rec_er.redefinir"
			},
			{
				nome: "entes",
				valor: JSON.stringify(entes)
			},
			{
				nome: "idos",
				valor: JSON.stringify(idos)
			}];
	exec(params, function(dados) {
		mostrarMensagem(dados.Message, (dados.Result == "OK") ? "m" : "e");
	});
}

function salvarPermissoes() {
	var arvRecursos =  $.fn.zTree.getZTreeObj("arvRecursos");
	var arvGrupos =  $.fn.zTree.getZTreeObj("arvGrupos");
	var node = arvRecursos.getSelectedNodes();
	var recurso = node[0].id;
	var grupos = "";
	var params = null;
	node = arvGrupos.getCheckedNodes();
	for (var x in node) {
		if (grupos.length > 0) {
			grupos = grupos + ',';
		}
		grupos = grupos + node[x].id;
	}
	params = [{
				nome: "action",
				valor: "acesso.atualizarRecurso"
			},
			{
				nome: "recurso",
				valor: recurso
			},
			{
				nome: "grupos",
				valor: grupos
			}];
	exec(params, function(dados) {
		mostrarMensagem(dados.Message, (dados.Result == "OK") ? "m" : "e");
	});
}